package com.general.framework.example.simpleFactoryPattern;

public class SimpleFactoryTest2 {
    public static void main(String[] args) {
        // CourseFactory factory = new CourseFactory();
        // ICourse java = factory.create("java");
        // java.record();
        // ICourse python = factory.create("python");
        // python.record();

        /**
         * 以上代码弊端
         * 客户端调用变简单了，但如果业务要增加前端课程，那么工厂中的 create() 方法就要每次都根据产品的增加修改代码逻辑，
         * 不符合开闭原则 因此还可以对简单工厂模式继续优化，采用反射技术
         */
        CourseFactory courseFactory = new CourseFactory();
        // ICourse course = courseFactory.create("org.example.simpleFactoryPattern.JavaCourse");
        /**
         * 优化之后 品不断丰富的过程中不需要修改 CourseFactory 中的代码 但还有个 题是，
         * 方法参数是字符串 可控性有待提升，而且还需要强制转型 。再修改一下代码
        */

        ICourse course = courseFactory.create(JavaCourse.class);
        course.record();
    }
}
